define(function(require, exports, module) {
/*
 * My97 DatePicker 4.8 Beta4
 * License: http://www.my97.net/dp/license.asp
 */
	 
var $dp,WdatePicker;

var $ = {
	$langList: [{
		name: "en",
		charset: "UTF-8"
	}, {
		name: "zh-cn",
		charset: "gb2312"
	}, {
		name: "zh-tw",
		charset: "GBK"
	}],
	$skinList: [{
		name: "default",
		charset: "gb2312"
	}, {
		name: "whyGreen",
		charset: "gb2312"
	}, {
		name: "blue",
		charset: "gb2312"
	}, {
		name: "green",
		charset: "gb2312"
	}, {
		name: "simple",
		charset: "gb2312"
	}, {
		name: "ext",
		charset: "gb2312"
	}, {
		name: "blueFresh",
		charset: "gb2312"
	}, {
		name: "twoer",
		charset: "gb2312"
	}, {
		name: "YcloudRed",
		charset: "gb2312"
	}],
	$wdate: true,
	$crossFrame: true,
	$preLoad: false,
	$dpPath: require.resolve('./'),
	doubleCalendar: false,
	enableKeyboard: true,
	enableInputMask: true,
	autoUpdateOnChanged: null,
	weekMethod: "ISO8601",
	position: {},
	lang: "auto",
	skin: "default",
	dateFmt: "yyyy-MM-dd",
	realDateFmt: "yyyy-MM-dd",
	realTimeFmt: "HH:mm:ss",
	realFullFmt: "%Date %Time",
	minDate: "1900-01-01 00:00:00",
	maxDate: "2099-12-31 23:59:59",
	startDate: "",
	alwaysUseStartDate: false,
	yearOffset: 1911,
	firstDayOfWeek: 0,
	isShowWeek: false,
	highLineWeekDay: true,
	isShowClear: true,
	isShowToday: true,
	isShowOK: true,
	isShowOthers: true,
	readOnly: false,
	errDealMode: 0,
	autoPickDate: null,
	qsEnabled: true,
	autoShowQS: false,
	opposite: false,
	hmsMenuCfg: {
		H: [1, 6],
		m: [5, 6],
		s: [15, 4]
	},
	opposite: false,
	specialDates: null,
	specialDays: null,
	disabledDates: null,
	disabledDays: null,
	onpicking: null,
	onpicked: null,
	onclearing: null,
	oncleared: null,
	ychanging: null,
	ychanged: null,
	Mchanging: null,
	Mchanged: null,
	dchanging: null,
	dchanged: null,
	Hchanging: null,
	Hchanged: null,
	mchanging: null,
	mchanged: null,
	schanging: null,
	schanged: null,
	eCont: null,
	vel: null,
	elProp: "",
	errMsg: "",
	quickSel: [],
	has: {},
	getRealLang: function() {
		var _ = $.$langList;
		for (var A = 0; A < _.length; A++) if (_[A].name == this.lang) return _[A];
		return _[0]
	}
};
WdatePicker = U;
var Y = window,
	T = {
		innerHTML: ""
	},
	N = "document",
	H = "documentElement",
	C = "getElementsByTagName",
	V, A, S, G, c, X = navigator.appName;
if (X == "Microsoft Internet Explorer") S = true;
else if (X == "Opera") c = true;
else G = true;
A = $.$dpPath || J();
if ($.$wdate) K(A + "skin/WdatePicker.css");
V = Y;
if ($.$crossFrame) {
	try {
		while (V.parent != V && V.parent[N][C]("frameset").length == 0) V = V.parent
	} catch (O) {}
}
if (!V.$dp) V.$dp = {
	ff: G,
	ie: S,
	opera: c,
	status: 0,
	defMinDate: $.minDate,
	defMaxDate: $.maxDate
};
B();
if ($.$preLoad && $dp.status == 0) E(Y, "onload", function() {
	U(null, true)
});
if (!Y[N].docMD) {
	E(Y[N], "onmousedown", D, true);
	Y[N].docMD = true
}
if (!V[N].docMD) {
	E(V[N], "onmousedown", D, true);
	V[N].docMD = true
}
E(Y, "onunload", function() {
	if ($dp.dd) P($dp.dd, "none")
});

function B() {
	try {
		V[N], V.$dp = V.$dp || {}
	} catch ($) {
		V = Y;
		$dp = $dp || {}
	}
	var A = {
		win: Y,
		$: function($) {
			return (typeof $ == "string") ? Y[N].getElementById($) : $
		},
		$D: function($, _) {
			return this.$DV(this.$($).value, _)
		},
		$DV: function(_, $) {
			if (_ != "") {
				this.dt = $dp.cal.splitDate(_, $dp.cal.dateFmt);
				if ($) for (var B in $) if (this.dt[B] === undefined) this.errMsg = "invalid property:" + B;
				else {
					this.dt[B] += $[B];
					if (B == "M") {
						var C = $["M"] > 0 ? 1 : 0,
							A = new Date(this.dt["y"], this.dt["M"], 0).getDate();
						this.dt["d"] = Math.min(A + C, this.dt["d"])
					}
				}
				if (this.dt.refresh()) return this.dt
			}
			return ""
		},
		show: function() {
			var A = V[N].getElementsByTagName("div"),
				$ = 100000;
			for (var B = 0; B < A.length; B++) {
				var _ = parseInt(A[B].style.zIndex);
				if (_ > $) $ = _
			}
			this.dd.style.zIndex = $ + 2;
			P(this.dd, "block");
			P(this.dd.firstChild, "")
		},
		unbind: function($) {
			$ = this.$($);
			if ($.initcfg) {
				L($, "onclick", function() {
					U($.initcfg)
				});
				L($, "onfocus", function() {
					U($.initcfg)
				})
			}
		},
		hide: function() {
			P(this.dd, "none")
		},
		attachEvent: E
	};
	for (var _ in A) V.$dp[_] = A[_];
	$dp = V.$dp
}
function E(B, _, A, $) {
	if (B.addEventListener) {
		var C = _.replace(/on/, "");
		A._ieEmuEventHandler = function($) {
			return A($)
		};
		B.addEventListener(C, A._ieEmuEventHandler, $)
	} else B.attachEvent(_, A)
}
function L(A, $, _) {
	if (A.removeEventListener) {
		var B = $.replace(/on/, "");
		_._ieEmuEventHandler = function($) {
			return _($)
		};
		A.removeEventListener(B, _._ieEmuEventHandler, false)
	} else A.detachEvent($, _)
}
function a(_, $, A) {
	if (typeof _ != typeof $) return false;
	if (typeof _ == "object") {
		if (!A) for (var B in _) {
			if (typeof $[B] == "undefined") return false;
			if (!a(_[B], $[B], true)) return false
		}
		return true
	} else if (typeof _ == "function" && typeof $ == "function") return _.toString() == $.toString();
	else return _ == $
}
function J() {
	var _, A, $ = Y[N][C]("script");
	for (var B = 0; B < $.length; B++) {
		_ = $[B].getAttribute("src") || "";
		_ = _.substr(0, _.toLowerCase().indexOf("wdatepicker.js"));
		A = _.lastIndexOf("/");
		if (A > 0) _ = _.substring(0, A + 1);
		if (_) break
	}
	return _
}
function K(A, $, B) {
	var D = Y[N][C]("HEAD").item(0),
		_ = Y[N].createElement("link");
	if (D) {
		_.href = A;
		_.rel = "stylesheet";
		_.type = "text/css";
		if ($) _.title = $;
		if (B) _.charset = B;
		D.appendChild(_)
	}
}
function F($) {
	$ = $ || V;
	var A = 0,
		_ = 0;
	while ($ != V) {
		var D = $.parent[N][C]("iframe");
		for (var F = 0; F < D.length; F++) {
			try {
				if (D[F].contentWindow == $) {
					var E = W(D[F]);
					A += E.left;
					_ += E.top;
					break
				}
			} catch (B) {}
		}
		$ = $.parent
	}
	return {
		"leftM": A,
		"topM": _
	}
}
function W(G, F) {
	if (G.getBoundingClientRect) return G.getBoundingClientRect();
	else {
		var A = {
			ROOT_TAG: /^body|html$/i,
			OP_SCROLL: /^(?:inline|table-row)$/i
		},
			E = false,
			I = null,
			_ = G.offsetTop,
			H = G.offsetLeft,
			D = G.offsetWidth,
			B = G.offsetHeight,
			C = G.offsetParent;
		if (C != G) while (C) {
			H += C.offsetLeft;
			_ += C.offsetTop;
			if (R(C, "position").toLowerCase() == "fixed") E = true;
			else if (C.tagName.toLowerCase() == "body") I = C.ownerDocument.defaultView;
			C = C.offsetParent
		}
		C = G.parentNode;
		while (C.tagName && !A.ROOT_TAG.test(C.tagName)) {
			if (C.scrollTop || C.scrollLeft) if (!A.OP_SCROLL.test(P(C))) if (!c || C.style.overflow !== "visible") {
				H -= C.scrollLeft;
				_ -= C.scrollTop
			}
			C = C.parentNode
		}
		if (!E) {
			var $ = b(I);
			H -= $.left;
			_ -= $.top
		}
		D += H;
		B += _;
		return {
			"left": H,
			"top": _,
			"right": D,
			"bottom": B
		}
	}
}
function M($) {
	$ = $ || V;
	var B = $[N],
		A = ($.innerWidth) ? $.innerWidth : (B[H] && B[H].clientWidth) ? B[H].clientWidth : B.body.offsetWidth,
		_ = ($.innerHeight) ? $.innerHeight : (B[H] && B[H].clientHeight) ? B[H].clientHeight : B.body.offsetHeight;
	return {
		"width": A,
		"height": _
	}
}
function b($) {
	$ = $ || V;
	var B = $[N],
		A = B[H],
		_ = B.body;
	B = (A && A.scrollTop != null && (A.scrollTop > _.scrollTop || A.scrollLeft > _.scrollLeft)) ? A : _;
	return {
		"top": B.scrollTop,
		"left": B.scrollLeft
	}
}
function D($) {
	try {
		var _ = $ ? ($.srcElement || $.target) : null;
		if ($dp.cal && !$dp.eCont && $dp.dd && _ != $dp.el && $dp.dd.style.display == "block") $dp.cal.close()
	} catch ($) {}
}
function Z() {
	$dp.status = 2
}
var Q, _;

function U(K, C) {
	if (!$dp) return;
	B();
	var L = {};
	for (var H in K) L[H] = K[H];
	for (H in $) if (H.substring(0, 1) != "$" && L[H] === undefined) L[H] = $[H];
	if (C) {
		if (!J()) {
			_ = _ || setInterval(function() {
				if (V[N].readyState == "complete") clearInterval(_);
				U(null, true)
			}, 50);
			return
		}
		if ($dp.status == 0) {
			$dp.status = 1;
			L.el = T;
			I(L, true)
		} else return
	} else if (L.eCont) {
		L.eCont = $dp.$(L.eCont);
		L.el = T;
		L.autoPickDate = true;
		L.qsEnabled = false;
		I(L)
	} else {
		if ($.$preLoad && $dp.status != 2) return;
		var F = D();
		if (Y.event === F || F) {
			L.srcEl = F.srcElement || F.target;
			F.cancelBubble = true
		}
		L.el = L.el = $dp.$(L.el || L.srcEl);
		if (!L.el || L.el["My97Mark"] === true || L.el.disabled || ($dp.dd && P($dp.dd) != "none" && $dp.dd.style.left != "-970px")) {
			try {
				if (L.el["My97Mark"]) L.el["My97Mark"] = false
			} catch (A) {}
			return
		}
		if (F && L.el.nodeType == 1 && !a(L.el.initcfg, K)) {
			$dp.unbind(L.el);
			E(L.el, F.type == "focus" ? "onclick" : "onfocus", function() {
				U(K)
			});
			L.el.initcfg = K
		}
		I(L)
	}
	function J() {
		if (S && V != Y && V[N].readyState != "complete") return false;
		return true
	}
	function D() {
		if (G) {
			func = D.caller;
			while (func != null) {
				var $ = func.arguments[0];
				if ($ && ($ + "").indexOf("Event") >= 0) return $;
				func = func.caller
			}
			return null
		}
		return event
	}
}
function R(_, $) {
	return _.currentStyle ? _.currentStyle[$] : document.defaultView.getComputedStyle(_, false)[$]
}
function P(_, $) {
	if (_) if ($ != null) _.style.display = $;
	else return R(_, "display")
}
function I(G, _) {
	var D = G.el ? G.el.nodeName : "INPUT";
	if (_ || G.eCont || new RegExp(/input|textarea|div|span|p|a/ig).test(D)) G.elProp = D == "INPUT" ? "value" : "innerHTML";
	else return;
	if (G.lang == "auto") G.lang = S ? navigator.browserLanguage.toLowerCase() : navigator.language.toLowerCase();
	if (!G.eCont) for (var C in G) $dp[C] = G[C];
	if (!$dp.dd || G.eCont || ($dp.dd && (G.getRealLang().name != $dp.dd.lang || G.skin != $dp.dd.skin))) {
		if (G.eCont) E(G.eCont, G);
		else {
			$dp.dd = V[N].createElement("DIV");
			$dp.dd.style.cssText = "position:absolute";
			V[N].body.appendChild($dp.dd);
			E($dp.dd, G);
			if (_) $dp.dd.style.left = $dp.dd.style.top = "-970px";
			else {
				$dp.show();
				B($dp)
			}
		}
	} else if ($dp.cal) {
		$dp.show();
		$dp.cal.init();
		if (!$dp.eCont) B($dp)
	}
	function E(K, J) {
		var I = V[N].domain,
			F = false,
			G = "<iframe hideFocus=true width=9 height=7 frameborder=0 border=0 scrolling=no src=\"about:blank\"></iframe>";
		K.innerHTML = G;
		var _ = $.$langList,
			D = $.$skinList,
			H;
		try {
			H = K.lastChild.contentWindow[N]
		} catch (E) {
			F = true;
			K.removeChild(K.lastChild);
			var L = V[N].createElement("iframe");
			L.hideFocus = true;
			L.frameBorder = 0;
			L.scrolling = "no";
			L.src = "javascript:(function(){var d=document;d.open();d.domain='" + I + "';})()";
			K.appendChild(L);
			setTimeout(function() {
				H = K.lastChild.contentWindow[N];
				C()
			}, 97);
			return
		}
		C();

		function C() {
			var _ = J.getRealLang();
			K.lang = _.name;
			K.skin = J.skin;
			var $ = ["<head><script>", "", "var doc=document, $d, $dp, $cfg=doc.cfg, $pdp = parent.$dp, $dt, $tdt, $sdt, $lastInput, $IE=$pdp.ie, $FF = $pdp.ff,$OPERA=$pdp.opera, $ny, $cMark = false;", "if($cfg.eCont){$dp = {};for(var p in $pdp)$dp[p]=$pdp[p];}else{$dp=$pdp;};for(var p in $cfg){$dp[p]=$cfg[p];}", "doc.oncontextmenu=function(){try{$c._fillQS(!$dp.has.d,1);showB($d.qsDivSel);}catch(e){};return false;};", "</script><script src=", A, "lang/", _.name, ".js charset=", _.charset, "></script>"];
			if (F) $[1] = "document.domain=\"" + I + "\";";
			for (var C = 0; C < D.length; C++) if (D[C].name == J.skin) $.push("<link rel=\"stylesheet\" type=\"text/css\" href=\"" + A + "skin/" + D[C].name + "/datepicker.css\" charset=\"" + D[C].charset + "\"/>");
			$.push("<script src=\"" + A + "calendar.js\"></script>");
			$.push("</head><body leftmargin=\"0\" topmargin=\"0\" tabindex=0></body></html>");
			$.push("<script>var t;t=t||setInterval(function(){if(doc.ready){new My97DP();$cfg.onload();$c.autoSize();$cfg.setPos($dp);clearInterval(t);}},20);</script>");
			J.setPos = B;
			J.onload = Z;
			H.write("<html>");
			H.cfg = J;
			H.write($.join(""));
			H.close()
		}
	}
	function B(J) {
		var H = J.position.left,
			C = J.position.top,
			D = J.el;
		if (D == T) return;
		if (D != J.srcEl && (P(D) == "none" || D.type == "hidden")) D = J.srcEl;
		var I = W(D),
			$ = F(Y),
			E = M(V),
			B = b(V),
			G = $dp.dd.offsetHeight,
			A = $dp.dd.offsetWidth;
		if (isNaN(C)) C = 0;
		if (($.topM + I.bottom + G > E.height) && ($.topM + I.top - G > 0)) C += B.top + $.topM + I.top - G - 2;
		else {
			C += B.top + $.topM + I.bottom;
			var _ = C - B.top + G - E.height;
			if (_ > 0) C -= _
		}
		if (isNaN(H)) H = 0;
		H += B.left + Math.min($.leftM + I.left, E.width - A - 5) - (S ? 2 : 0);
		J.dd.style.top = C + "px";
		J.dd.style.left = H + "px"
	}
}

module.exports=WdatePicker;

})